<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>线程池 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'modules-threadpool.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/modules-threadpool.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/modules-threadpool.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/modules-threadpool.html" rel="nofollow" target="_blank">../en/modules-threadpool.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">安装和设置</a></span>
»
<span class="breadcrumb-link"><a href="settings.html">配置 Elasticsearch</a></span>
»
<span class="breadcrumb-node">线程池</span>
</div>
<div class="navheader">
<span class="prev">
<a href="modules-transport.html">« 传输</a>
</span>
<span class="next">
<a href="notification-settings.html">预警设置 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="modules-threadpool"></a>线程池 (thread pools)
</h2>
</div></div></div>
<p>
一个节点使用若干个线程池来管理内存消耗。
与许多线程池关联的队列允许保留挂起的请求，而不是丢弃。
</p>
<p>有若干个线程池，但重要的几个是：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">generic</code>
</span>
</dt>
<dd>
对应 一般操作(例如，后台节点发现)。其线程池类型为 <code class="literal">scaling</code>
</dd>
</dl>
</div>
<div class="variablelist">
<a id="search-threadpool"></a>
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">search</code>
</span>
</dt>
<dd>
对应 count、search、suggest 操作。
其线程池类型为 <code class="literal">fixed_auto_queue_size</code><span class="remark">(自动的固定的队列大小)</span>，大小为 <code class="literal">int((可用的处理器数 * 3) / 2) + 1</code>，初始队列大小为 <code class="literal">1000</code>
</dd>
<dt>
<span class="term">
<a id="search-throttled"></a><code class="literal">search_throttled</code>
</span>
</dt>
<dd>
对应 <code class="literal">搜索节流索引</code><span class="remark">(search_throttled indices)</span> 上的 count、search、suggest、get 操作。
其线程池类型为 <code class="literal">fixed_auto_queue_size</code><span class="remark">(自动的固定的队列大小)</span>，大小为<code class="literal">1</code>，初始队列大小为 <code class="literal">100</code>
</dd>
<dt>
<span class="term">
<code class="literal">get</code>
</span>
</dt>
<dd>
对应 get 操作。
其线程池类型为 <code class="literal">fixed</code><span class="remark">(固定的)</span>，大小为 <code class="literal">可用的处理器数</code>，队列大小为 <code class="literal">1000</code>
</dd>
<dt>
<span class="term">
<code class="literal">analyze</code>
</span>
</dt>
<dd>
对应 分析(analyze) 请求。
其线程池类型为 <code class="literal">fixed</code><span class="remark">(固定的)</span>，大小为 <code class="literal">1</code>，队列大小为 <code class="literal">16</code>
</dd>
<dt>
<span class="term">
<code class="literal">write</code>
</span>
</dt>
<dd>
对应 单个文档的 index/delete/update 及 批量(bulk) 请求。
其线程池类型为 <code class="literal">fixed</code><span class="remark">(固定的)</span>，大小为 <code class="literal">可用的处理器数</code>, 队列大小为 <code class="literal">200</code>。
线程池最大数量为 <code class="literal">1 + 可用的处理器数</code>。
</dd>
<dt>
<span class="term">
<code class="literal">snapshot</code>
</span>
</dt>
<dd>
对应 snapshot/restore 操作。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，最大值为 <code class="literal">min(5, (可用的处理器数)/2)</code>。
</dd>
<dt>
<span class="term">
<code class="literal">warmer</code>
</span>
</dt>
<dd>
对应 段(segment)的 预热(warm-up) 操作。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，最大值为 <code class="literal">min(5, (可用的处理器数)/2)</code>。
</dd>
<dt>
<span class="term">
<code class="literal">refresh</code>
</span>
</dt>
<dd>
对应 刷新(refhresh) 操作。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，最大值为 <code class="literal">min(10, (可用的处理器数)/2)</code>。
</dd>
<dt>
<span class="term">
<code class="literal">listener</code>
</span>
</dt>
<dd>
主要用于java客户端在监听器线程设置为<code class="literal">true</code>时执行操作。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，默认最大值为 <code class="literal">min(10, (可用的处理器数)/2)</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fetch_shard_started</code>
</span>
</dt>
<dd>
对应 列出分片状态。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，默认最大值为 <code class="literal">2 * 可用的处理器数</code>。
</dd>
<dt>
<span class="term">
<code class="literal">fetch_shard_store</code>
</span>
</dt>
<dd>
对应 列出分片存储。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，默认最大值为 <code class="literal">2 * 可用的处理器数</code>。
</dd>
<dt>
<span class="term">
<code class="literal">flush</code>
</span>
</dt>
<dd>
对应 <a class="xref" href="indices-flush.html" title="Flush API">flush</a><span class="remark">(冲洗)</span>、<a class="xref" href="indices-synced-flush-api.html" title="Synced flush API">synced flush</a><span class="remark">(同步冲洗)</span> 及 <a class="xref" href="index-modules-translog.html" title="Translog">translog</a><span class="remark">(事务日志)</span> <code class="literal">fsync</code> 操作。

其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，默认最大值为 <code class="literal">min(5, 可用的处理器数/2)</code>。
</dd>
<dt>
<span class="term">
<code class="literal">force_merge</code>
</span>
</dt>
<dd>
对应 <a class="xref" href="indices-forcemerge.html" title="Force merge API">强制合并(force merge)</a> 操作。
其线程池类型为 <code class="literal">fixed</code><span class="remark">(固定的)</span>，大小为 1，队列大小无限制。
</dd>
<dt>
<span class="term">
<code class="literal">management</code>
</span>
</dt>
<dd>
对应 集群管理。
其线程池类型为 <code class="literal">scaling</code><span class="remark">(可扩展的)</span>，保持活动状态 <code class="literal">5m</code>，默认最大值为 <code class="literal">5</code>。
</dd>
</dl>
</div>
<p>
可以通过设置特定类型的参数来更改特定的线程池；例如，更改<code class="literal">write</code>线程池中的线程数量：
</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    write:
        size: 30</pre>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="thread-pool-types"></a>线程池类型
</h3>
</div></div></div>
<p>以下是线程池的类型及其各自的参数：</p>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="fixed-thread-pool"></a><code class="literal">fixed</code>
</h4>
</div></div></div>
<p>
<code class="literal">fixed</code>类型的线程池 拥有一个固定大小的线程来处理带有队列(可选有界)的请求，用于处理没有线程为其服务的等待请求。  
</p>
<p>
参数 <code class="literal">size</code> 控制线程的数量。  
</p>
<p>
参数 <code class="literal">queue_size</code> 允许控制没有线程执行请求的队列大小。
默认情况下，它被设置为<code class="literal">-1</code>，这意味着它是无限制的。
当队列已满时，进来的请求将被终止。
</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    write:
        size: 30
        queue_size: 1000</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="fixed-auto-queue-size"></a><code class="literal">fixed_auto_queue_size</code>
</h4>
</div></div></div>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
这个功能是实验性的，可能会在未来的版本中完全更改或删除。  
Elastic 将尽最大努力修复任何问题，但实验性功能不受官方 GA 特性的 SLA 支持。  
</p>
</div>
</div>
<p>废弃的 [实验性的<code class="literal">fixed_auto_queue_size</code> 线程池类型已在 7.7.0 版本废弃，并将在 8.0 版本中移除]</p>
<p>
<code class="literal">fixed_auto_queue_size</code> 类型的线程池 持有一个固定大小的线程来处理带有一个有界队列的请求，该队列用于处理没有线程为其服务的等待请求。  

它类似于<code class="literal">fixed</code> 线程池，然而，<code class="literal">queue_size</code> 根据 <a href="https://en.wikipedia.org/wiki/Little%27s_law" class="ulink" target="_top">Little’s Law</a>的计算自动调整。  

每当 <code class="literal">auto_queue_frame_size</code> 操作完成时，这些计算将潜在地将 <code class="literal">auto_queue_frame_size</code> 上下调整50。
</p>
<p>
参数 <code class="literal">size</code> 控制线程的数量。  
</p>
<p>
参数 <code class="literal">queue_size</code>允许控制没有线程执行的挂起请求队列的初始大小。
</p>
<p>
<code class="literal">min_queue_size</code>设置控制<code class="literal">queue_size</code>可调整的最小数量。
</p>
<p>
<code class="literal">min_queue_size</code>设置控制<code class="literal">queue_size</code>可调整的最大数量。
</p>
<p>
<code class="literal">auto_queue_frame_size</code>设置控制在队列调整之前进行测量的操作次数。
它应该足够大，使得单个操作不会过度地影响计算。
</p>
<p>
<code class="literal">target_response_time</code> 是一个时间值设置，指示线程池队列中任务的目标平均响应时间。
如果任务经常超过这个时间，线程池队列数将被减小，以便拒绝任务。
</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    search:
        size: 30
        queue_size: 500
        min_queue_size: 10
        max_queue_size: 1000
        auto_queue_frame_size: 2000
        target_response_time: 1s</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="scaling-thread-pool"></a><code class="literal">scaling</code>
</h4>
</div></div></div>
<p>
<code class="literal">scaling</code> 类型的线程池 持有一个动态数量的线程。
这个数字与工作负载成正比，并且在<code class="literal">core</code>和<code class="literal">max</code>参数的值之间变化。  
</p>
<p>
参数 <code class="literal">keep_alive</code> 决定了一个线程在不做任何工作的情况下应该在线程池中保留多长时间。
</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    warmer:
        core: 1
        max: 8
        keep_alive: 2m</pre>
</div>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="node.processors"></a>分配的处理器设置 (Allocated processors setting)
</h3>
</div></div></div>
<p>
处理器的数量是自动检测的，线程池设置是基于它自动设置的。
在某些情况下，覆盖检测到的处理器数量会很有用。
这可以通过显式设置 <code class="literal">node.processors</code> 设置来实现。
</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">node.processors: 2</pre>
</div>
<p>有几个显式覆盖 <code class="literal">node.processors</code> 设置的用例：</p>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
如果你在同一主机上运行多个 Elasticsearch 实例，但希望 Elasticsearch 调整线程池的大小，就像它只有一部分 CPU 一样，那么应该所需的部分的值来覆盖 <code class="literal">node.processors</code> 设置，例如，如果你在一个 16 核的机器上运行两个 Elasticsearch 实例，设置 <code class="literal">node.processors</code> 为 <code class="literal">8</code> 。

请注意，这是一个专家级的用例，涉及的内容远不止配置 <code class="literal">node.processors</code> 设置，因为还有其他考虑事项，如更改垃圾回收器线程的数量、将进程锁定到内核等等。
</li>
<li class="listitem">
有时检测到的处理器数量是错误的，在这种情况下，显式设置 <code class="literal">node.processors</code> 设置可以解决此类问题。
</li>
</ol>
</div>
<p>
为了检查检测到的处理器数量，使用带有 <code class="literal">os</code> 标志的节点信息 API。
</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="modules-transport.html">« 传输</a>
</span>
<span class="next">
<a href="notification-settings.html">预警设置 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>